package com.hlbspringcloud.mq;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @Author huanglibin
 * @Project mq
 * @Description 消息接收者
 * @Date 2020-12-02-15-07-30
 * @Version 1.0
 */
public class SingleReceiver {
    /**
     * 队列名称
     */
    public final static String queryName = "singleQuery";

    /**
     * 接收消息
     * @throws Exception
     */
    public void receiveMessage() throws Exception{
        //获取连接
        Connection rabbitmqConnection = RabbitmqUntil.getRabbitmqConnection();
        //获取管道
        Channel channel = rabbitmqConnection.createChannel();

        /**
         * 队列创建(如果队列存在，则不进行创建)
         * 参数1：队列名
         * 参数2：是否支持持久化，默认队列在内存中，重启会丢失。设置为true,会保存到erlang自带的数据库中
         * 参数3：当连接关闭后是否自动删除队列；是否私有队列，如果私有，其他通道不能访问当前队列
         * 参数4：当没有消费者，是否自动删除队列
         * 参数5：其他参数
         */
        channel.queueDeclare(queryName,false,false,false,null);

        //创建接收信息用户
        DefaultConsumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("接收到的信息"+new String(body));
            }
        };
        /**
         * 监听rabbitmq队列信息（此时程序会自动堵塞，当有数据到达时，处理相应的数据）
         * 参数1：队列名
         * 参数2：是否自动问答
         * 参数3：消费用户
         */
        channel.basicConsume(queryName,true,consumer);
    }

    public static void main(String[] args) throws Exception {
        SingleReceiver receiver = new SingleReceiver();
        receiver.receiveMessage();
    }
}
